Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Змішанепрограмування на мовах С та Асемблер

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕПМС

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи
Варіант:
4 14 1

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ Звіт про виконання лабораторної роботи № 2 з курсу „ Системне програмування” Змішанепрограмування на мовах С та Асемблер Мета роботи:оволодітинавикамистворенняпрограм, частиниякихнаписанірізнимимовамипрограмуванняЗасвоїти правила взаємодіїрізнихмодулів. Теоретичнівідомості Труднощі опису зв'язку програм мовою C і асемблерних програм полягає в тому, що різні версії мови C мають різні угоди про зв'язки і для більш точної інформації варто користатися посібником з наявної версії мови C. Більшістьверсіймови C забезпечують передачу параметрів через стек у зворотній (у порівнянні з іншимимовами) послідовності. Звичайно доступ, наприклад, до двохпараметрів, переданих через стек, здійснюється в такийспосіб: PUSH EBP MOV EBP,ESP MOV EAX,[EBP+8] MOV EDX,[EBP+12] ... POP EBP RET Деяківерсіїмови C розрізняютьвеликі і малібукви, тому ім'яасемблерного модуля повинне бути представлено в тому ж символьному регістрі, якийвикористовують для посилання C-програми. У деякихверсіяхмови C потрібно, щобасемблерніпрограми, щозмінюютьрегістри EDI і ESI, записувалиїхнійвміст у стек при вході і відновлювалицізначеннязі стека при виході. Ассемблерніпрограмиповинніповертатизначення, якщоценеобхідно, у регістрі EAX (подвійне слово) чи в регістровійпарі EDX:EAX (8 слів). Для деякихверсіймови C, якщоассемблернапрограмавстановлює прапор DF, те вона повинна скинутийого командою CLD перед поверненням. Щобскомпонувати разом модулі C++ і Макро асемблера, повинні бути дотриманінаступні три умови: У модулях Макро Асемблераповиннівикористовуватися угоди проімена, прийняті в C++. C++ і Макро Асемблерповинніспільновикористовувативідповідніфункції й іменазмінних у формі, прийнятної для C++. Для комбінуваннямодулів у виконуванупрограмупотрібновикористовуватиутіліту-компоновщик (TLINK, LINKтощо). Поверненнязначень Програми, яківикликаються з С++ і написані на Асемблеріможутьповертатизначення. Значенняфункційповертаються в такийспосіб: тип щоповертає значения  Де перебуваєзначення, щоповертається  unsignedchar  EAX  char  EAX  enum  EAX  unsignedshort  EAX  short  EAX  unsignedint  EAX  int  EAX  unsignedlong  EAX  long  EAX  float регістрвершини стека співпроцесора 8087 (ST(0))  double регістрвершини стека співпроцесора 8087 (ST(0))  longdouble регістрвершини стека співпроцесора 8087 (ST(0))  near*  EAX  Завдання Створити програму, яка реалізовує обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Основний модуль – створюється мовою С. Він повинен забезпечувати: ввід даних з клавіатури; виклик підпрограми обчислення виразу; вивід на екран результату обчислення виразу. Модуль безпосередніх обчислень – здійснює всі обчислення виразу і створюється мовою Assembler; Відлагодити та протестувати програму. Результати роботи програми продемонструвати викладачу. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї, а також результатів її роботи. Примітка. В лабораторній роботі використати взаємовиклики С – ASM – С. Для виводу результатів обчислень забезпечити виклик стандартної функції printf() із модуля ASM . 4 X=A4+C1-D4/5+K 45694   Код програми С – ASM main.cpp #include <iostream> #include <conio.h> #include <stdio.h> using namespace std; extern "C" int calc(int a, char c, int d); extern "C" const int K; int main() {//X=A4+C1-D4/5+K 45694 int A,C,D; cout << "X=A4+C1-D4/5+K.\n"; cout << "Please, enter your numbers:\n"; cout << "A4 = "; cin >> A; cout << "C1 = "; cin >> C; cout << "D4 = "; cin >> D; cout << endl << "Result(asm) = " << calc(A,C,D); cout << endl << "Result(c++) = " << A+C-D/5+K; getch(); return 0; } calc.asm .386 .model flat public _K .data _K dd 45694h x dd 0 .code _calc proc ;X=A4+C1-D4/5+K 45694 public _calc push ebp mov ebp,esp ...
Антиботан аватар за замовчуванням

01.04.2014 22:04

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини